package jmine.tec.persist.hibernate;

import jmine.tec.utils.spring.BeanReference;

import org.hibernate.SessionFactory;
import org.hibernate.engine.SessionImplementor;

/**
 * Guarda referência para um {@link SessionImplementor}.
 * <p>
 * Esta implementação assume que a {@link SessionFactory#getCurrentSession() sessão do hibernate} passada como argumento implementa a
 * interface {@link SessionImplementor}.
 * </p>
 * 
 * @author wellington.santos
 * @created May 21, 2012
 */
public class SessionImplementorReference implements BeanReference<SessionImplementor> {

    private final BeanReference<SessionFactory> sessionFactoryReference;

    /**
     * Construtor.
     *
     * @param sessionFactoryReference referência para a {@link SessionFactory} que será utilizada
     */
    public SessionImplementorReference(BeanReference<SessionFactory> sessionFactoryReference) {
        this.sessionFactoryReference = sessionFactoryReference;
    }

    /**
     * {@inheritDoc}
     *
     * @return {@inheritDoc}
     */
    public SessionImplementor get() {
        return (SessionImplementor) this.sessionFactoryReference.get().getCurrentSession();
    }

}
